package com.prosay.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SendMsgServlet extends HttpServlet{
    
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String[] keywords;
	public void init(){
		ServletConfig config = this.getServletConfig();
		String keyword = config.getInitParameter("keyword");
		keywords = keyword.split(",");	
	}
	
	@Override
	public void destroy(){
		System.out.println("destroy 方法被调用");
	}
	
	/*
	 *  当service 方法不注释的情况下，第一次启动后，提交表单，会打印init 方法被调用，
	 *  service 方法被调用。但是get 方法和post 方法都不被调用。
	 */
	   
	@Override
	public void service(HttpServletRequest request,HttpServletResponse response) throws IOException{
		System.out.println("service 方法被调用");
		
		// request 对象通过getParameter(String parameter) 来获取提交的参数
		
		// 这个msg 是前台表单页面的参数名，必须一致
		String msg = request.getParameter("msg");
		String face = request.getParameter("face");
		for(String keyword:keywords){
			if(msg.contains(keyword)){
				// 这个地方要注意，Jame 说了,字符串常量，一定不要忘了赋值。
				// msg.replaceAll(keyword,"***"); 这样是会出问题的。
				msg = msg.replaceAll(keyword, "***");
			}
		}
		// 还可以获取用户的IP 地址
		//String ip = request.getHeader(arg0); 这个是获取请求头的吧
		// 获取当前会话用户登录的用户名
		String userName = (String)request.getSession().getAttribute("userName");
		String ip = request.getRemoteAddr();
		if(userName == null){
			userName = "";
		}
		StringBuilder str = new StringBuilder(userName);
		str.append("<font color='red' size='5'> say:</font>" + msg + "<img src=\"../images/"+ face+ ".gif\"/>");
		//str.append(msg);
		
		ServletContext application = this.getServletContext();
		@SuppressWarnings("unchecked")
		List<String> msgs = (List<String>)application.getAttribute("msgs");
		msgs.add(str.toString());
		application.setAttribute("msgs", msgs);
		
		/**
		 * response 实际上就是http协议建立的一套连接
		 * jame 说request 实际上就是由inputstream 生成的。
		 * 而response 实际上就是由outputstream 生成的。
		 * 
		 */
		
		//ServletOutputStream sos = response.getOutputStream(); 这是得到字节流
		
		
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html,charset=utf-8");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset=\"UTF-8\">");
		out.println("<title>sendMsg</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<form action=\"send\" method=\"post\"> ");
		out.println("<input type=\"text\" name=\"msg\" id=\"msg\"/>");
		out.println("<select name=\"face\">");
		out.println("<option value=\"1\">smile</option>");
		out.println("<option value=\"2\">cry</option>");
		out.println("<option value=\"3\">flower</option>");
		out.println("</select>");
		out.print("<input type=\"submit\" value=\"send\"/>");
		out.println("</form><a href='../room/logout' target='_parent'>退出</a>");
		out.println("</body>");
		out.println("</html><br/>");
		//out.println("<img src=\"../images/"+ face+ ".gif\"/>");

		// 创建一个cookie
		Cookie cook = new Cookie("teacher","jame");
		response.addCookie(cook);
		out.println(str.toString());
        out.flush();
        out.close();	
	}
	
	/**
	 * request 能够拿到客户端（浏览器端）请求的所有相关信息。
	 * 比如一家人到外婆家去，吃完饭走的时候，外婆会送一点东西给孩子。其实就是response 了一点东西。
	 * response 就是服务器向客户端或（浏览器）返回的信息。返回的所有的相关数据。
	 */
	
	@Override
	public void doGet(HttpServletRequest request,HttpServletResponse response){
		System.out.println("这是get 请求");
	}
	
	@Override
	public void doPost(HttpServletRequest request,HttpServletResponse response){
		System.out.println("这是post 请求");
		
	}
}
